home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / assembler / progasm1.lha / SORGENTI2 / LEZIONE6e.s < prev    next >
Text File  |  1994-07-28  |  9KB  |  257 lines

  1.  
  2. ; Lezione6e.s        SOVRAPPOSIZIONE DI 2 BITPLANES UGUALI, MA UNO SPOSTATO
  3. ;            DI UNA LINEA IN BASSO, PER SIMULARE UN FONT OMBREGGIATO
  4.  
  5.     SECTION    CiriCop,CODE
  6.  
  7. Inizio:
  8.     move.l    4.w,a6        ; Execbase in a6
  9.     jsr    -$78(a6)    ; Disable - ferma il multitasking
  10.     lea    GfxName(PC),a1    ; Indirizzo del nome della lib da aprire in a1
  11.     jsr    -$198(a6)    ; OpenLibrary
  12.     move.l    d0,GfxBase    ; salvo l'indirizzo base GFX in GfxBase
  13.     move.l    d0,a6
  14.     move.l    $26(a6),OldCop    ; salviamo l'indirizzo della copperlist vecchia
  15.  
  16. ;    Puntiamo i bitplanes in copperlist
  17.  
  18.     MOVE.L    #BITPLANE,d0    ; in d0 mettiamo l'indirizzo del bitplane
  19.     LEA    BPLPOINTERS,A1    ; puntatori nella COPPERLIST
  20.     move.w    d0,6(a1)    ; copia la word BASSA dell'indirizzo del plane
  21.     swap    d0        ; scambia le 2 word di d0 (es: 1234 > 3412)
  22.     move.w    d0,2(a1)    ; copia la word ALTA dell'indirizzo del plane
  23.  
  24. ; NOTATE IL -80!!!!
  25.  
  26.     MOVE.L    #BITPLANE-80,d0    ; in d0 mettiamo l'indirizzo del bitplane -80
  27.                 ; ossia una linea SOTTO! *******
  28.     LEA    BPLPOINTERS2,A1    ; puntatori nella COPPERLIST
  29.     move.w    d0,6(a1)    ; copia la word BASSA dell'indirizzo del plane
  30.     swap    d0        ; scambia le 2 word di d0 (es: 1234 > 3412)
  31.     move.w    d0,2(a1)    ; copia la word ALTA dell'indirizzo del plane
  32.  
  33.     move.l    #COPPERLIST,$dff080    ; Puntiamo la nostra COP
  34.     move.w    d0,$dff088        ; Facciamo partire la COP
  35.     move.w    #0,$dff1fc        ; Disattiva l'AGA
  36.     move.w    #$c00,$dff106        ; Disattiva l'AGA
  37.  
  38.     bsr.w    print        ; Stampa le linee di testo sullo schermo
  39.                 ; in HIRES
  40. mouse:
  41.     btst    #6,$bfe001    ; tasto sinistro del mouse premuto?
  42.     bne.s    mouse        ; se no, torna a mouse:
  43.  
  44.     move.l    OldCop(PC),$dff080    ; Puntiamo la cop di sistema
  45.     move.w    d0,$dff088        ; facciamo partire la vecchia cop
  46.  
  47.     move.l    4.w,a6
  48.     jsr    -$7e(a6)    ; Enable - riabilita il Multitasking
  49.     move.l    gfxbase(PC),a1    ; Base della libreria da chiudere
  50.     jsr    -$19e(a6)    ; Closelibrary - chiudo la graphics lib
  51.     rts            ; USCITA DAL PROGRAMMA
  52.  
  53. ;    Dati
  54.  
  55. GfxName:
  56.     dc.b    "graphics.library",0,0
  57.  
  58. GfxBase:        ; Qua ci va l'indirizzo di base per gli Offset
  59.     dc.l    0    ; della graphics.library
  60.  
  61. OldCop:            ; Qua ci va l'indirizzo della vecchia COP di sistema
  62.     dc.l    0
  63.  
  64. ;    Routine che stampa caratteri larghi 8x8 pixel (su schermo HIRES)
  65.  
  66. PRINT:
  67.     LEA    TESTO(PC),A0    ; Indirizzo del testo da stampare in a0
  68.     LEA    BITPLANE,A3    ; Indirizzo del bitplane destinazione in a3
  69.     MOVEQ    #25-1,D3    ; NUMERO RIGHE DA STAMPARE: 25
  70. PRINTRIGA:
  71.     MOVEQ    #80-1,D0    ; NUMERO COLONNE PER RIGA: 80 (hires!)
  72. PRINTCHAR2:
  73.     MOVEQ    #0,D2        ; Pulisci d2
  74.     MOVE.B    (A0)+,D2    ; Prossimo carattere in d2
  75.     SUB.B    #$20,D2        ; TOGLI 32 AL VALORE ASCII DEL CARATTERE, IN
  76.                 ; MODO DA TRASFORMARE, AD ESEMPIO, QUELLO
  77.                 ; DELLO SPAZIO (che e' $20), in $00, quello
  78.                 ; DELL'ASTERISCO ($21), in $01...
  79.     MULU.W    #8,D2        ; MOLTIPLICA PER 8 IL NUMERO PRECEDENTE,
  80.                 ; essendo i caratteri alti 8 pixel
  81.     MOVE.L    D2,A2
  82.     ADD.L    #FONT,A2    ; TROVA IL CARATTERE DESIDERATO NEL FONT...
  83.  
  84.                 ; STAMPIAMO IL CARATTERE LINEA PER LINEA
  85.     MOVE.B    (A2)+,(A3)    ; stampa LA LINEA 1 del carattere
  86.     MOVE.B    (A2)+,80(A3)    ; stampa LA LINEA 2  " "
  87.     MOVE.B    (A2)+,80*2(A3)    ; stampa LA LINEA 3  " "
  88.     MOVE.B    (A2)+,80*3(A3)    ; stampa LA LINEA 4  " "
  89.     MOVE.B    (A2)+,80*4(A3)    ; stampa LA LINEA 5  " "
  90.     MOVE.B    (A2)+,80*5(A3)    ; stampa LA LINEA 6  " "
  91.     MOVE.B    (A2)+,80*6(A3)    ; stampa LA LINEA 7  " "
  92.     MOVE.B    (A2)+,80*7(A3)    ; stampa LA LINEA 8  " "
  93.  
  94.     ADDQ.w    #1,A3        ; A1+1, avanziamo di 8 bit (PROSSIMO CARATTERE)
  95.  
  96.     DBRA    D0,PRINTCHAR2    ; STAMPIAMO D0 (80) CARATTERI PER RIGA
  97.  
  98.     ADD.W    #80*7,A3    ; ANDIAMO A CAPO
  99.  
  100.     DBRA    D3,PRINTRIGA    ; FACCIAMO D3 RIGHE
  101.  
  102.     RTS
  103.  
  104.  
  105.         ; numero caratteri per linea: 80, dunque 2 di queste da 40!
  106. TESTO:         ;          1111111111222222222233333333334
  107.          ;     1234567890123456789012345678901234567890
  108.     dc.b    '   PRIMA RIGA  IN HIRES 640 PIXEL DI LAR' ; 1a \ PRIMA RIGA
  109.     dc.b    'GHEZZA!  -- -- --   SEMPRE LA PRIMA RIGA' ; 1b /
  110.     dc.b    '                SECONDA RIGA            ' ; 2  \ SECONDA RIGA
  111.     dc.b    'ANCORA SECONDA RIGA                     ' ;    /
  112.     dc.b    '     /\  /                              ' ; 3
  113.     dc.b    '                                        ' ;
  114.     dc.b    '    /  \/                               ' ; 4
  115.     dc.b    '                                        ' ;
  116.     dc.b    '                                        ' ; 5
  117.     dc.b    '                                        ' ;
  118.     dc.b    '        SESTA RIGA                      ' ; 6
  119.     dc.b    '                        FINE SESTA RIGA ' ;
  120.     dc.b    '                                        ' ; 7
  121.     dc.b    '                                        ' ;
  122.     dc.b    '                                        ' ; 8
  123.     dc.b    '                                        ' ;
  124.     dc.b    'FABIO CIUCCI COMMUNICATION INTERNATIONAL' ; 9
  125.     dc.b    ' MARKETING TRUST TRADEMARK COPYRIGHTED  ' ;
  126.     dc.b    '                                        ' ; 10
  127.     dc.b    '                                        ' ;
  128.     dc.b    '   1234567890 !@#$%^&*()_+|\=-[]{}      ' ; 11
  129.     dc.b    '   PROVE TECNICHE DI TRASMISSIONE       ' ;
  130.     dc.b    '                                        ' ; 12
  131.     dc.b    '                                        ' ;
  132.     dc.b    '     LA PALINGENETICA OBLITERAZIONE DELL' ; 13
  133.     dc.b    "'IO TRASCENDENTALE CHE SI IMMEDESIMA    " ;
  134.     dc.b    '                                        ' ; 14
  135.     dc.b    '                                        ' ;
  136.     dc.b    '                                        ' ; 15
  137.     dc.b    '                                        ' ;
  138.     dc.b    '  Nel mezzo del cammin di nostra vita   ' ; 16
  139.     dc.b    '                                        ' ;
  140.     dc.b    '                                        ' ; 17
  141.     dc.b    '                                        ' ;
  142.     dc.b    '    Mi RitRoVaI pEr UnA sELva oScuRa    ' ; 18
  143.     dc.b    '                                        ' ;
  144.     dc.b    '                                        ' ; 19
  145.     dc.b    '                                        ' ;
  146.     dc.b    '    CHE LA DIRITTA VIA ERA SMARRITA     ' ; 20
  147.     dc.b    '                                        ' ;
  148.     dc.b    '                                        ' ; 21
  149.     dc.b    '                                        ' ;
  150.     dc.b    '  AHI Quanto a DIR QUAL ERA...          ' ; 22
  151.     dc.b    '                                        ' ;
  152.     dc.b    '                                        ' ; 23
  153.     dc.b    '                                        ' ;
  154.     dc.b    '                                        ' ; 24
  155.     dc.b    '                                        ' ;
  156.     dc.b    ' C:\>_                                  ' ; 25
  157.     dc.b    '                                        ' ;
  158.     dc.b    '                                        ' ; 26
  159.     dc.b    '                                        ' ;
  160.  
  161.     EVEN
  162.  
  163.  
  164.  
  165.     SECTION    GRAPHIC,DATA_C
  166.  
  167. COPPERLIST:
  168.     dc.w    $120,$0000,$122,$0000,$124,$0000,$126,$0000,$128,$0000 ; SPRITE
  169.     dc.w    $12a,$0000,$12c,$0000,$12e,$0000,$130,$0000,$132,$0000
  170.     dc.w    $134,$0000,$136,$0000,$138,$0000,$13a,$0000,$13c,$0000
  171.     dc.w    $13e,$0000
  172.  
  173.     dc.w    $8e,$2c81    ; DiwStrt    (registri con valori normali)
  174.     dc.w    $90,$2cc1    ; DiwStop
  175.     dc.w    $92,$003c    ; DdfStart HIRES
  176.     dc.w    $94,$00d4    ; DdfStop HIRES
  177.     dc.w    $102,0        ; BplCon1
  178.     dc.w    $104,0        ; BplCon2
  179.     dc.w    $108,0        ; Bpl1Mod
  180.     dc.w    $10a,0        ; Bpl2Mod
  181.  
  182.             ; 5432109876543210
  183.     dc.w    $100,%1010001000000000    ; bit 13 - 2 bitplanes, 4 colori HIRES
  184.  
  185. BPLPOINTERS:
  186.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane
  187. BPLPOINTERS2:
  188.     dc.w $e4,$0000,$e6,$0000    ;secondo bitplane
  189.  
  190.     dc.w    $180,$103    ; color0 - SFONDO
  191.     dc.w    $182,$fff    ; color1 - plane 1 posizione normale, e'
  192.                 ; la parte che "sporge" in alto.
  193.     dc.w    $184,$345    ; color2 - plane 2 (sfasato in basso)
  194.     dc.w    $186,$abc    ; color3 - entrambi i plane - sovrapposizione
  195.  
  196.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  197.  
  198. ;    Il FONT caratteri 8x8
  199.  
  200. FONT:
  201.     incbin    "metal.fnt"    ; Carattere largo
  202. ;    incbin    "normal.fnt"    ; Simile ai caratteri kickstart 1.3
  203. ;    incbin    "nice.fnt"    ; Carattere stretto
  204.  
  205.  
  206.     SECTION    MIOPLANE,BSS_C    ; Le SECTION BSS devono essere fatte di
  207.                 ; soli ZERI!!! si usa il DS.b per definire
  208.                 ; quanti zeri contenga la section.
  209.  
  210. ;    Ecco perche' serve il "ds.b 80":
  211. ;    MOVE.L    #BITPLANE-80,d0    ; in d0 mettiamo l'indirizzo del bitplane -80
  212. ;                ; ossia una linea SOTTO! *******
  213.  
  214.     ds.b    80    ; la linea che "spunta"
  215. BITPLANE:
  216.     ds.b    80*256    ; un bitplane HIres 640x256
  217.  
  218.     end
  219.  
  220. Ecco qua un "trucchetto" per abbellire la nostra scritta: basta attivare il
  221. secondo bitplane, e sovrapporlo al primo, ma spostato una linea piu' in basso,
  222. in modo da creare questa situazione:
  223.  
  224.     ...###..            ...111..    ; 1 = color1 (chiaro)
  225.     ..#...#.    ...###..    ..12221.    ; 2 = color2 (scuro)
  226.     ..#...#.    ..#...#.    ..3...3.    ; 3 = color3 (medio)
  227.     ..#####.    +   ..#...#.   =    ..31113.
  228.     ..#...#.    ..#####.    ..32223.
  229.     ..#...#.    ..#...#.    ..3...3.
  230.     ..#...#.    ..#...#.    ..3...3.
  231.     ........    ..#...#.    ..2...2.
  232.             ........
  233.  
  234.     dc.w    $180,$103    ; color0 - SFONDO
  235.     dc.w    $182,$fff    ; color1 - plane 1 posizione normale, e'
  236.                 ; la parte che "sporge" in alto.
  237.     dc.w    $184,$345    ; color2 - plane 2 (sfasato in basso)
  238.     dc.w    $186,$abc    ; color3 - entrambi i plane - sovrapposizione
  239.  
  240. La sovrapposizione di bitplanes uguali, ma sfasati e' usata spesso per simulare
  241. effetti "rilievo" o "spessore"
  242.  
  243. Per accentuare questo aspetto spesso viene sfasato di un pixel anche in senso
  244. laterale, provate cosi':
  245.  
  246.     dc.w    $102,$10    ; BplCon1 - plane 2 un pixel a destra
  247.  
  248. Su piccoli font forse peggiora la leggibilita', ma su superfici piu' grandi
  249. puo' risultare utile sfasare anche a destra:
  250.  
  251.     ......
  252.     .:::::#
  253.     .:::::#
  254.     .:::::#
  255.      ######
  256.  
  257.